package logica;

import mapa.Coordenada;
import unidades.UnidadHT;

public class AccionRegenerar implements Accion {

    /**
     * Regenera la unidad actual. Su ejecucion devolvera la coordenada en la que se encuentra la unidad
     */
    public AccionRegenerar() {
    }

    /**
     * Regenera la unidad
     * 
     * @param args Array con los argumentos necesarios. 
     * Debe recibir los parámetros en el siguiente orden:
     * <ol><li>ModeloHT</li>
     * <li>UnidadHT</li>
     * <li>Collection<Coordenada> rangoMovimiento</li>
     * <li>Collection<Coordenada> rangoAtaque</li>
     * <li>Coordenada</li></ol>
     * @return la coordenada donde está la unidad
     */
    public Object ejecutarAccion(Object... args) {
        ModeloHT modelo = (ModeloHT) args[0];
        UnidadHT unidadActual = (UnidadHT) args[1];
        Coordenada crdnd = (Coordenada) args[4];
        if (!unidadActual.puedeRegenerar()) {
            throw new IllegalStateException("La unidad no puede regenerarse porque ya ha realizado otras acciones");
        }
        if (modelo.getPartida().getTurno().getPuntosAccion() <= 0) {
            return null;
        }
        int nuevaVit = unidadActual.getVidaPartida() + (int) Math.round(unidadActual.VIDA_MAX * 0.2);
        nuevaVit = nuevaVit > unidadActual.VIDA_MAX ? unidadActual.VIDA_MAX : nuevaVit;
        unidadActual.setVidaPartida(nuevaVit);
        unidadActual.regenerado();
        modelo.actualizarTurno();
        return crdnd;
    }
}
